package com.test.spring.fusion.utlis;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

/**
 * 日期工具类
 *
 * @author Rubin.Wei 2019/2/25 15:57
 */
public class DateUtil {


	/**
	 * 描述: 国际时间格式转换本地时间格式
	 * @param utcTime 国际时间字符串
	 * 创建人: 赵兴炎  
	 * 日期: 2019年10月24日
	 */
	public static String utcTimeToString(String utcTime) {
		try {
			utcTime = utcTime.replace("Z", " UTC");
			SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd'T'HHmmss Z");
			Date parse = format.parse(utcTime);
			SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
			utcTime = sf.format(parse);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return utcTime;
	}

	/**
	 * 描述: 字符串转时间
	 * @param stringTime 时间字符串
	 * 创建人: 赵兴炎  
	 * 日期: 2019年10月24日
	 */
	public static Date stringToDate(String stringTime) {
		Date date = null;
		try {
			SimpleDateFormat sDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
			date = sDateFormat.parse(stringTime);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return date;
	}

	/**
	 * 描述: 时间类型转字符串
	 * @param date 日期
	 * 创建人: 赵兴炎  
	 * 日期: 2019年10月24日
	 */
	public static String dateToString(Date date) {
		String dateTimeString = null;
		try {
			SimpleDateFormat sDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
			dateTimeString = sDateFormat.format(date);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return dateTimeString;
	}

	/**
	 * 描述: 获取一定天数内的日期列表
	 * @param nums 天数
	 * 创建人: 赵兴炎  
	 * 日期: 2019年10月24日
	 */
	public static String[] getBeforeDay(int nums) {
		String[] arr = new String[nums];
		SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
		Calendar calendar = null;
		for (int i = 0; i < nums; i++) {
			calendar = Calendar.getInstance();
			calendar.add(Calendar.DAY_OF_MONTH, -i);
			arr[nums - 1 - i] = simpleDateFormat.format(calendar.getTime());
		}
		return arr;
	}

	/**
	 * 描述: 字符串转时间最小值
	 * @param timeString 时间字符串
	 * 创建人: 赵兴炎  
	 * 日期: 2019年10月24日
	 */
	public static Date minStringDate(String timeString) {
		Date date = new Date();
		SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		try {
			timeString = timeString + " 00:00:00";
			date = simpleDateFormat.parse(timeString);
		} catch (Exception e) {
			throw new RuntimeException("字符串转时间最小值异常");
		}
		return date;
	}

	/**
	 * 描述: 字符串转时间最大值
	 * @param timeString 时间字符串
	 * 创建人: 赵兴炎  
	 * 日期: 2019年10月24日
	 */
	public static Date maxStringDate(String timeString) {
		Date date = new Date();
		SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		try {
			timeString = timeString + " 23:59:59";
			date = simpleDateFormat.parse(timeString);
		} catch (Exception e) {
			throw new RuntimeException("字符串转时间最大值异常");
		}
		return date;
	}

	/**
	 * 描述: 特定业务场景使用 点位统计
	 * @param hourTime 字符串时间
	 * 创建人: 赵兴炎  
	 * 日期: 2019年10月24日
	 */
	public static String hourTimeString(String hourTime) {
		try {
			SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH");
			Date parse = simpleDateFormat.parse(hourTime);
			Calendar nowTime = Calendar.getInstance();
			nowTime.setTime(parse);
			nowTime.add(Calendar.HOUR, 1);
			Date time = nowTime.getTime();
			hourTime = dateToString(time);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return hourTime;
	}
	
	public static StatisticalHourBo findStatisticalHour() {
		StatisticalHourBo statisticalHourBo = new StatisticalHourBo();
		try {
			String minTimeString = null;
			String maxTimeString = null;
			String[] arr = new String[24];
			SimpleDateFormat simpleDateFormat1 = new SimpleDateFormat("yyyy-MM-dd HH:00:00");
			SimpleDateFormat simpleDateFormat2 = new SimpleDateFormat("yyyy-MM-dd");
			SimpleDateFormat simpleDateFormat3 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
			SimpleDateFormat simpleDateFormat4 = new SimpleDateFormat("yyyy-MM-dd HH");
			Calendar nowTime = Calendar.getInstance();
			Date date = nowTime.getTime();
			String format = simpleDateFormat2.format(date);
			Date minStringDate = DateUtil.minStringDate(format);
			if (date.compareTo(minStringDate) > 0) {
				nowTime.add(Calendar.HOUR, 1);
				date = nowTime.getTime();
			}
			nowTime.setTime(date);
			String formatDate = simpleDateFormat1.format(date);
			arr[arr.length - 1] = formatDate;
			for (int i = 0; i < 24; i++) {
				nowTime.add(Calendar.HOUR, -1);
				formatDate = simpleDateFormat1.format(nowTime.getTime());
				if (i < 22 || i == 22) {
					arr[arr.length - 2 - i] = formatDate;
				} else {
					minTimeString = formatDate;
				}
			}
			maxTimeString = arr[arr.length - 2];
			Date minTimeDate = simpleDateFormat1.parse(minTimeString);
			Date maxTimeDate = simpleDateFormat3
					.parse(simpleDateFormat4.format(simpleDateFormat4.parse(maxTimeString)) + ":59:59");
			statisticalHourBo.setXvalues(arr);
			statisticalHourBo.setMinTimeDate(minTimeDate);
			statisticalHourBo.setMaxTimeDate(maxTimeDate);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return statisticalHourBo;
	}
}
